package com.ideviu.webapp.action;

import java.io.Serializable;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.stereotype.Component;

import com.ideviu.model.Negocio;
import com.ideviu.model.User;
import com.ideviu.service.NegocioManager;

@Component("negocioForm")
@Scope("request")
public class NegocioForm extends BasePage implements Serializable {
	@Autowired
	private NegocioManager negocioManager;
    private Negocio negocio = new Negocio();
    private Long id;

    public void setNegocioManager(NegocioManager negocioManager) {
        this.negocioManager = negocioManager;
    }

    public Negocio getNegocio() {
        return negocio;
    }

    public void setNegocio(Negocio negocio) {
        this.negocio = negocio;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String delete() {
        negocioManager.remove(negocio.getId());
        addMessage("negocio.deleted");

        return "list";
    }

    public String edit() {
        // Workaround for not being able to set the id using #{param.id} when using Spring-configured managed-beans
        if (id == null) {
            id = new Long(getParameter("id"));
        }
        // Comparison to zero (vs. null) is required with MyFaces 1.2.2, not with previous versions
        if (id != null && id != 0) {
            negocio = negocioManager.get(id);
        } else {
            negocio = new Negocio();
        }

        return "edit";
    }

    public String save() {
        boolean isNew = (negocio.getId() == null || negocio.getId() == 0);
        
        // Seteamos el usuario al bean de negocio para establecer la relación.
        SecurityContext  securityContext = (SecurityContext) getSession().getAttribute("SPRING_SECURITY_CONTEXT");
    	User user = (User) securityContext.getAuthentication().getPrincipal();
        
    	negocio.setUsuario(user);
    	
        negocioManager.save(negocio);

        String key = (isNew) ? "negocio.added" : "negocio.updated";
        addMessage(key);

        if (isNew) {
            return "list";
        } else {
            return "edit";
        }
    }
} 